
package picsim;

/**
 *
 * @author Daniel
 * @brief Implementiert alle Funktionen des Stacks.
 * 
 */

public class Stack {


    private int[] stack = new int[8];
    private boolean stackfull;

    /**
     * @brief Konstruktor der Klasse Stack (setzt alle Elemente auf 0).
     */
    public Stack()  {
        for(int i = 0; i<8; i++) {
            stack[i] = 0;
        }
    }

    /**
     * @brief Stezt alle Elemente wieder auf 0
     */
    public void clearStack() {
        for(int i = 0; i<8; i++) {
            stack[i] = 0;
        }
    }

    /**
     *
     * @return stack (int[])
     * @brief Liefert den kompletten Stack zurück
     */
    public int[] getStack() {
        return stack;
    }

    /**
     *
     * @return true|false (boolean)
     * @brief Prüft, ob der Stack voll ist.
     */
    public boolean isStackFull()    {
       if(stack[7]!=0){
           return true;
       } else {
           return false;
       }
    }

    /**
     *
     * @param stackelement (int)
     * @throws Exception
     * @brief Schiebt ein Element über das aktuellste Element auf dem Stack
     */
    public void push(int stackelement) throws Exception {
        if(isStackFull())   {
            throw new Exception("FullStack");
        }
        else {
            for(int i = 7; i>0; i--){
                stack[i] = stack[i-1];
            }
            stack[0]= stackelement;
        }

    }

    /**
     *
     * @return result (int)
     * @brief Holt das aktuellste Element vom Stack und liefert es zurück.
     */
    public int pop() {
        int result = 0;
        result=stack[0];
        for(int i = 0; i<7;i++){
            stack[i] = stack[i+1];
        }
        stack[7] = 0;
        return result;
    }
    
}